/**
 * 递归遍历树数据或列表数据，找到key值为keyValue的item，并返回item所在一层的相关信息
 * @param data 树数据或列表数据
 * @param keyValue key的值
 * @param keyName key的字段名
 * @returns
 */
export function findItemByKey(
	data,
	keyValue,
	keyName = "id",
	parent
) {
	for (let i = 0, ii = data.length; i < ii; i++) {
		const item = data[i];
		if (item[keyName] === keyValue) {
			return {
				item,
				index: i,
				items: data,
				parent,
			};
		}
		if (item.children && item.children.length > 0) {
			const result = findItemByKey(item.children, keyValue, keyName, item);
			if (result) {
				return result;
			}
		}
	}
	return null;
}

/**
 * 递归遍历树数据，每个节点都执行一次loop回调
 * @param data 树数据
 * @param loop 执行回调，返回false终止遍历
 * @param parent 当前遍历的层的父节点
 * @param isReverse 遍历顺序，为true则反向遍历
 * @returns 返回false终止遍历
 */
export function loopItem(
  data,
  loop,
  parent,
  isReverse
){
  const len = data.length;
  for (let i = isReverse ? len - 1 : 0; isReverse ? i >= 0 : i < len; isReverse ? i-- : i++) {
    const item = data[i];
    if (loop(item, i, data, parent) === false) {
      return false;
    }
    if (item.children && item.children.length > 0) {
      const result = loopItem(item.children, loop, item, isReverse);
      if (result === false) {
        return false;
      }
    }
  }
}